/*
 *@Description: 微信授权相关，授权通过后重定向到web工程链接
 *@Author: panlua
 *@Date: 2019-08-05 09:20:45
*/

const Router = require('koa-router')
const weChatInfo = require('../config/index').weChat
const weChat = require('weChat-h5-authorize')

weChat.create({
  appId: weChatInfo.appId,
  appSecret: weChatInfo.appsecret
})

const router = new Router({
  prefix: '/weChat'
})

/*
 *@name: 微信登录
 *@param:{type} 
 *@description: 重定向微信授权页面
 *@return:
 *@author: panlua
 *@date: 2019-08-05 09:06:00
*/
router.get('/login', async(ctx) => {
  ctx.redirect(`https://open.weixin.qq.com/connect/oauth2/authorize?appid=${weChatInfo.appId}&redirect_uri=${weChatInfo.redirect_uri}&response_type=code&scope=snsapi_userinfo&state=#wechat_redirect`)
})

/*
 *@name: 获取用户信息
 *@param:{type} 
 *@description: 如果用户是第一次登录则保存个人信息，然后重定向到web工程主入口 + token
 *@return:
 *@author: panlua
 *@date: 2019-08-05 09:01:16
*/
router.get('/info', async(ctx) => {
  const code = ctx.query.code
  // 获取用户信息
  const userInfo = await weChat.getUserInfo(code)
  // 检测用户是否存在
  const is = await $dbQuery.findOne([{
    label: 'open_id',
    value: $dbQuery.string(userInfo.openid)
  }], 'user')
  if (!is) {
    // 不存在则存储用户信息
    const userData = [{
      label: 'open_id',
      value: $dbQuery.string(userInfo.openid)
    }, {
      label: 'nick_name',
      value: $dbQuery.string(userInfo.nickname)
    }, {
      label: 'avatar',
      value: $dbQuery.string(userInfo.headimgurl)
    }, {
      label: 'sex',
      value: Number(userInfo.sex)
    }]
    await $dbQuery.add(userData, 'user')
  }
  // 后期重定向到 web入口页面
  ctx.body = $msgSuccess(userInfo)
})

module.exports = router